package com.aop;

import com.aop.entity.TestAopEntity;

import java.util.concurrent.ConcurrentHashMap;

/**
 *   CGLIB动态代理
 *  zj: spring 初始化__从 @ZhAspectJ 类获取 方法上定义切点 @ZhPointCut("com.aop.entity.TestAopEntity_doSomeThing")
 *   从切面中反射 real obj  ——》为带 @ZhAspectJ 注解对象 生成 代理对象
 *   						   enhancer.setSuperclass__为real obj代理
 *   						   enhancer.setCallback(this) __@ZhAspectJ 注解对象生成代理对象
 *   ####  implements MethodInterceptor --> intercept (before invoke after)
 */
public class TestAopMain {

	@SuppressWarnings("unused")
	public static void main(String[] args) {
		// 模拟容器初始化
		ApplicationContext applicationContext = new ApplicationContext();
		ConcurrentHashMap<String, Object> proxyBeanMap = ApplicationContext.proxyBeanMap;

		// 生成的代理对象 默认为该类名的小写
		TestAopEntity test = (TestAopEntity) proxyBeanMap.get("testaopentity");
		test.doSomeThing();

		System.out.println("-------------");

		test.doWtihNotProxy();
	}
}
